package musik.fyj.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;

import sun.misc.BASE64Encoder;

public class TokenUtils {

	/*
	 * 单例设计模式
	 * 1. 类TokenUtils的初始化对象在内存里面只有唯一一个
	 * 2. 构造方法 private
	 * 3. 定义一个静态 TokenUtils的全局对象
	 */

	// 单例对象里面饿汉模式：在类加载时候就是直接初始化TokenUtils的对象
	// 单例对象里面懒汉模式：在类加载时候不会初始化，在需要时候再初始化，getInstance() 的静态方法，当此静态方法调用时候，才初始化

	private static TokenUtils instance; // 单例对象中懒汉模式

	private TokenUtils() {

	}

	public static TokenUtils getInstance() {
		if(instance == null) {
			instance = new TokenUtils();
		}
		return instance;
	}

	/**
	 * 生成令牌，需要对令牌加密
	 * @return
	 */
	@SuppressWarnings("restriction")
	public String createToken() {

		// 通过当前系统时间 + 随机数字 = 明文令牌（无加密）
		String encodeToken = "";
		String token = (System.currentTimeMillis()  + new Random().nextInt(999999999)) + "";

		// 对令牌进行加密
		try {
			MessageDigest md = MessageDigest.getInstance("md5");
			byte[] md5 = md.digest(token.getBytes());

			BASE64Encoder encoder = new BASE64Encoder();
			encodeToken =  encoder.encode(md5);

		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}

		return encodeToken;
	}

}
